#ifndef __USART_H
#define	__USART_H


#include "stm32f10x.h"
#include <stdio.h>

/**
  * 串口宏定义，不同的串口挂载的总线和IO不一样，移植时需要修改这几个宏
	* 1-修改总线时钟的宏，uart1挂载到apb2总线，其他uart挂载到apb1总线
	* 2-修改GPIO的宏
  */

// 串口1-USART1
#define  DEBUG_USARTx                  	USART1
#define  DEBUG_USART_CLK                	RCC_APB2Periph_USART1
#define  DEBUG_USART_APBxClkCmd        	RCC_APB2PeriphClockCmd
#define  DEBUG_USART_BAUDRATE           	115200

// USART GPIO 引脚宏定义
#define  DEBUG_USART_GPIO_CLK           	(RCC_APB2Periph_GPIOA)
#define  DEBUG_USART_GPIO_APBxClkCmd    	RCC_APB2PeriphClockCmd

#define  DEBUG_USART_TX_GPIO_PORT       	GPIOA
#define  DEBUG_USART_TX_GPIO_PIN        	GPIO_Pin_9
#define  DEBUG_USART_RX_GPIO_PORT       	GPIOA
#define  DEBUG_USART_RX_GPIO_PIN        	GPIO_Pin_10

#define  DEBUG_USART_IRQ               	USART1_IRQn
#define  DEBUG_USART_IRQHandler         	USART1_IRQHandler


// 串口2-USART2
#define  U2_USARTx                   USART2
#define  U2_USART_CLK                RCC_APB1Periph_USART2
#define  U2_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
#define  U2_USART_BAUDRATE           9600

// USART GPIO 引脚宏定义
#define  U2_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
#define  U2_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

#define  U2_USART_TX_GPIO_PORT       GPIOA
#define  U2_USART_TX_GPIO_PIN        GPIO_Pin_2
#define  U2_USART_RX_GPIO_PORT       GPIOA
#define  U2_USART_RX_GPIO_PIN        GPIO_Pin_3

#define  U2_USART_IRQ                USART2_IRQn
#define  U2_USART_IRQHandler         USART2_IRQHandler

// 串口3-USART3
#define  U3_USARTx                   USART3
#define  U3_USART_CLK                RCC_APB1Periph_USART3
#define  U3_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
#define  U3_USART_BAUDRATE           9600

// USART GPIO 引脚宏定义
#define  U3_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)
#define  U3_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

#define  U3_USART_TX_GPIO_PORT       GPIOB
#define  U3_USART_TX_GPIO_PIN        GPIO_Pin_10
#define  U3_USART_RX_GPIO_PORT       GPIOB
#define  U3_USART_RX_GPIO_PIN        GPIO_Pin_11

#define  U3_USART_IRQ                USART3_IRQn
#define  U3_USART_IRQHandler         USART3_IRQHandler

// 串口4-USART4
#define  U4_USARTx                   USART4
#define  U4_USART_CLK                RCC_APB1Periph_USART4
#define  U4_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
#define  U4_USART_BAUDRATE           9600

// USART GPIO 引脚宏定义
#define  U4_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)
#define  U4_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

#define  U4_USART_TX_GPIO_PORT       GPIOC
#define  U4_USART_TX_GPIO_PIN        GPIO_Pin_10
#define  U4_USART_RX_GPIO_PORT       GPIOC
#define  U4_USART_RX_GPIO_PIN        GPIO_Pin_11

#define  U4_USART_IRQ                USART4_IRQn
#define  U4_USART_IRQHandler         USART4_IRQHandler

void USART_Config( void );
void USART2_Config( void );
//void USART3_Config( void );
void USART2_DataSend(unsigned char *data,uint16_t len);
//void USART3_DataSend(unsigned char *data,uint16_t len);
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch );
void Usart_SendString( USART_TypeDef * pUSARTx, char *str );
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch );
void printf_x(uint8_t *buff,uint32_t len,uint8_t end);

#endif /* __USART_H */
